LLVM_CFLAGS = `llvm-config --cppflags`
LLVM_LD = `llvm-config --ldflags --libs all`
LLVM_LIBS = `llvm-config --libs core`
CFLAGS = -Wall -g -c -std=c++11

obj/Terminal.o : src/Terminal.cpp src/Terminal.h src/Node.h
	clang++ $(CFLAGS) $(LLVM_CFLAGS) src/Terminal.cpp -o $@

obj/SourceTerminal.o : src/SourceTerminal.cpp src/SourceTerminal.h src/Terminal.h
	clang++ $(CFLAGS) $(LLVM_CFLAGS) src/SourceTerminal.cpp -o $@

obj/Node.o : src/Node.cpp src/Node.h src/SourceTerminal.h src/Terminal.h src/NodeContainer.h
	clang++ $(CFLAGS) $(LLVM_CFLAGS) src/Node.cpp -o $@

obj/ConstantInt.o : src/ConstantInt.cpp src/ConstantInt.h src/Node.h
	clang++ $(CFLAGS) $(LLVM_CFLAGS) src/ConstantInt.cpp -o $@

obj/PrimitiveBinOp.o : src/PrimitiveBinOp.cpp src/PrimitiveBinOp.h src/Node.h
	clang++ $(CFLAGS) $(LLVM_CFLAGS) src/PrimitiveBinOp.cpp -o $@

obj/Control.o : src/Control.cpp src/Control.h src/Node.h
	clang++ $(CFLAGS) $(LLVM_CFLAGS) src/Control.cpp -o $@

obj/ShiftRegister.o : src/ShiftRegister.cpp src/ShiftRegister.h src/Node.h
	clang++ $(CFLAGS) $(LLVM_CFLAGS) src/ShiftRegister.cpp -o $@

obj/NodeContainer.o : src/NodeContainer.cpp src/NodeContainer.h src/Node.h
	clang++ $(CFLAGS) $(LLVM_CFLAGS) src/NodeContainer.cpp -o $@

obj/DiagramBlock.o : src/DiagramBlock.cpp src/DiagramBlock.h src/NodeContainer.h
	clang++ $(CFLAGS) $(LLVM_CFLAGS) src/DiagramBlock.cpp -o $@

obj/DiagramInline.o : src/DiagramInline.cpp src/DiagramInline.h src/NodeContainer.h src/Node.h
	clang++ $(CFLAGS) $(LLVM_CFLAGS) src/DiagramInline.cpp -o $@

obj/DoWhile.o : src/DoWhile.cpp src/DoWhile.h src/DiagramInline.h
	clang++ $(CFLAGS) $(LLVM_CFLAGS) src/DoWhile.cpp -o $@

obj/main.o : src/main.cpp src/DoWhile.h src/Control.h src/ConstantInt.h
	clang++ $(CFLAGS) $(LLVM_CFLAGS) src/main.cpp -o $@

bin/main : obj/Terminal.o obj/SourceTerminal.o obj/Node.o obj/ConstantInt.o obj/PrimitiveBinOp.o obj/Control.o obj/NodeContainer.o obj/DiagramBlock.o obj/DiagramInline.o obj/DoWhile.o obj/main.o
	clang++ $(LLVM_LD) $^ $(LLVM_LIBS) -o $@ 

run : bin/main
	bin/main

clean :
	rm -f obj/*
	rm -f bin/*
	rm -rf src/*~
	rm -rf src/*#
	rm *#
	rm *~